package com.solution.sort;

import java.util.Arrays;

public class Solution {

    public String largestNumber(int[] nums) {
        int len = nums.length;
        // 将nums数据元素，从基本类型转换为包装器类型，方便使用lambda表达式
        Integer[] numArr = new Integer[len];
        for ( int i = 0 ; i < len ; i++ )
            numArr[i] = nums[i];
        // 排序
        Arrays.sort(numArr, (x, y) -> {
            long sx = 10, sy = 10;
            while ( sx <= x )
                sx *= 10;
            while ( sy <= y )
                sy *= 10;
            /*
                3，30，34，5，9
                y  x
                   y  x
                y     x
                y         x
                      y   x
                y           x
                      y     x
                          y x
                // 双指针，后减前，即x-y，将各数转化为同位数。如果最大的x或y是百位数，另一个是个位数，那么就让个位数后边补两个零转化为百位数
             */
            return (int)(-sy * x - y + sx * y + x);  // 如果结果大于零，xy不交换。否则xy交换
        });
        if (numArr[0] == 0)
            return "0";
        StringBuilder res = new StringBuilder();
        for ( int i = 0 ; i < len ; i++ )
            res.append(numArr[i]);
        return res.toString();
    }

}
